﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using acessaDB;
using Frame;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using Estrutura;


namespace Banco
{

    /// <summary>
    /// Summary description for BD_Material
    /// </summary>
    public class BD_Material
    {
        #region variaveis_globais

        acessaDB.conectaDBMSSQLServer sqlServer = new conectaDBMSSQLServer();
        string conectionString = System.Configuration.ConfigurationManager.AppSettings["SQLServerConnectionLocal"];
        string usuario = string.Empty;

        #endregion

        #region construtor

        public BD_Material()
        {
            if (System.Configuration.ConfigurationManager.AppSettings["ambiente"] == "PROD")
                conectionString = System.Configuration.ConfigurationManager.AppSettings["SQLServerConnectionProd"];
        }
        public BD_Material(string usu_Login)
        {
            if (System.Configuration.ConfigurationManager.AppSettings["ambiente"] == "PROD")
                conectionString = System.Configuration.ConfigurationManager.AppSettings["SQLServerConnectionProd"];
            usuario = usu_Login;
        }

        #endregion

        #region metodos

        public System.Data.DataSet _retorna_Material(
                                                string MATERIAL_ID,
                                                string MATERIAL_MODALIDADE_ID,
                                                string MTR_DESCRICAO,
                                                string MTR_VALOR,
                                                string MTR_QUANTIDADEDISP,
                                                string MTR_VALIDADE
                                                )
        {

            if (string.IsNullOrEmpty(MATERIAL_ID)) MATERIAL_ID = "''";
            if (string.IsNullOrEmpty(MATERIAL_MODALIDADE_ID)) MATERIAL_MODALIDADE_ID = "''";
            if (string.IsNullOrEmpty(MTR_DESCRICAO)) MTR_DESCRICAO = "''";
            if (string.IsNullOrEmpty(MTR_VALOR)) MTR_VALOR = "''";
            if (string.IsNullOrEmpty(MTR_QUANTIDADEDISP)) MTR_QUANTIDADEDISP = "''";
            if (string.IsNullOrEmpty(MTR_VALIDADE)) MTR_VALIDADE = "''";

            string sql = "SELECT " +
                                  "MATERIAL.MATERIAL_ID, " +
                                  "MATERIAL.MATERIAL_MODALIDADE_ID, " +
                                  "MATERIAL.MTR_DESCRICAO, " +
                                  "MATERIAL.MTR_VALOR, " +
                                  "MATERIAL.MTR_QUANTIDADEDISP, " +
                                  "MATERIAL.MTR_VALIDADE " +
                            "FROM MATERIAL " +
                            "LEFT JOIN MATERIAL_MODALIDADE ON MATERIAL_MODALIDADE.MATERIAL_MODALIDADE_ID = MATERIAL.MATERIAL_MODALIDADE_ID " +
                            "WHERE " +
                            "      (MATERIAL.MATERIAL_ID = " + MATERIAL_ID + "  OR " + MATERIAL_ID + " = '') AND " +
                            "      (MATERIAL.MATERIAL_MODALIDADE_ID = " + MATERIAL_MODALIDADE_ID + "  OR " + MATERIAL_MODALIDADE_ID + " = '') AND " +
                            "      (MATERIAL.MTR_DESCRICAO = " + MTR_DESCRICAO + "  OR " + MTR_DESCRICAO + " = '') AND " +
                            "      (MATERIAL.MTR_VALOR = " + MTR_VALOR + "  OR " + MTR_VALOR + " = '') AND " +
                            "      (MATERIAL.MTR_QUANTIDADEDISP = " + MTR_QUANTIDADEDISP + "  OR " + MTR_QUANTIDADEDISP + " = '') AND " +
                            "      (MATERIAL.MTR_VALIDADE = " + MTR_VALIDADE + "  OR " + MTR_VALIDADE + " = '') ";

            return sqlServer.retornaDataSet(sql, conectionString);;
            

        }


        public List<ES_Material> _obter_Material(
                                                string MATERIAL_ID,
                                                string MATERIAL_MODALIDADE_ID,
                                                string MTR_DESCRICAO,
                                                string MTR_VALOR,
                                                string MTR_QUANTIDADEDISP,
                                                string MTR_VALIDADE,
                                                string ORDER_BY_CLAUSE,
                                                string MTR_VIGENTE = "N"
                                                )
        {

            if (string.IsNullOrEmpty(MATERIAL_ID)) MATERIAL_ID = "0"; 
            if (string.IsNullOrEmpty(MATERIAL_MODALIDADE_ID)) MATERIAL_MODALIDADE_ID = "0";
            if (string.IsNullOrEmpty(MTR_DESCRICAO)) MTR_DESCRICAO = "''"; else MTR_DESCRICAO = Util.retonarAspas(MTR_DESCRICAO + "%");
            if (string.IsNullOrEmpty(MTR_VALOR)) MTR_VALOR = "0"; 
            if (string.IsNullOrEmpty(MTR_QUANTIDADEDISP)) MTR_QUANTIDADEDISP = "0"; 
            if (string.IsNullOrEmpty(MTR_VALIDADE)) MTR_VALIDADE = "0";
            if (string.IsNullOrEmpty(ORDER_BY_CLAUSE)) ORDER_BY_CLAUSE = "MATERIAL.MTR_DESCRICAO ";

            string sql = "SELECT " +
                                  "MATERIAL.MATERIAL_ID, " +
                                  "MATERIAL.MATERIAL_MODALIDADE_ID, " +
                                  "MATERIAL_MODALIDADE.MMD_DESCRICAO, " +
                                  "MATERIAL.MTR_DESCRICAO, " +
                                  "MATERIAL.MTR_VALOR, " +
                                  "MATERIAL.MTR_QUANTIDADEDISP, " +
                                  "MATERIAL.MTR_VALIDADE, " +
                                  "MATERIAL.MTR_OBSERVACAO, " +
                                  "MATERIAL.MTR_DTCADASTRO, " +
                                  "MATERIAL.MTR_DTVALIDADE, " +
                                  "(SELECT COUNT(ALUNO_MATERIAL_ID) FROM ALUNO_MATERIAL WHERE ALUNO_MATERIAL.MATERIAL_ID = MATERIAL.MATERIAL_ID) MTR_QUANTIDADEADQ "+
                            "FROM MATERIAL " +
                            "LEFT JOIN MATERIAL_MODALIDADE ON MATERIAL_MODALIDADE.MATERIAL_MODALIDADE_ID = MATERIAL.MATERIAL_MODALIDADE_ID " +
                            "WHERE " +
                            "      (MATERIAL.MATERIAL_ID = " + MATERIAL_ID + "  OR " + MATERIAL_ID + " = 0) AND " +
                            "      (MATERIAL.MATERIAL_MODALIDADE_ID = " + MATERIAL_MODALIDADE_ID + "  OR " + MATERIAL_MODALIDADE_ID + " = 0) AND " +
                            "      (MATERIAL.MTR_DESCRICAO LIKE " + MTR_DESCRICAO + "  OR " + MTR_DESCRICAO + " = '') AND " +
                            "      (MATERIAL.MTR_VALOR = " + MTR_VALOR + "  OR " + MTR_VALOR + " = 0) AND " +
                            "      (MATERIAL.MTR_QUANTIDADEDISP = " + MTR_QUANTIDADEDISP + "  OR " + MTR_QUANTIDADEDISP + " = 0) AND " +
                            "      (MATERIAL.MTR_VALIDADE = " + MTR_VALIDADE + "  OR " + MTR_VALIDADE + " = 0) ";
            
            if (MTR_VIGENTE == "S")
                sql +=      "AND (MTR_DTVALIDADE >= CURRENT_TIMESTAMP OR MTR_DTVALIDADE IS NULL) ";

            sql +=          " ORDER BY " + ORDER_BY_CLAUSE;

            List<ES_Material> lista = new List<ES_Material>();
            SqlConnection sqlConexao = new SqlConnection(conectionString);
            SqlDataReader dr = sqlServer.retornaDataReader(sql, conectionString, sqlConexao);
            try
            {
                while (dr.Read())
                {
                    ES_Material item = new ES_Material();
                    item.MATERIAL_ID = dr["MATERIAL_ID"].ToString();
                    item.MATERIAL_MODALIDADE_ID = dr["MATERIAL_MODALIDADE_ID"].ToString();
                    item.MMD_DESCRICAO = dr["MMD_DESCRICAO"].ToString();
                    item.MTR_DESCRICAO = dr["MTR_DESCRICAO"].ToString();
                    item.MTR_VALOR = dr["MTR_VALOR"].ToString();
                    item.MTR_QUANTIDADEDISP = dr["MTR_QUANTIDADEDISP"].ToString();
                    item.MTR_QUANTIDADEADQ = dr["MTR_QUANTIDADEADQ"].ToString();
                    item.MTR_VALIDADE = dr["MTR_VALIDADE"].ToString();
                    item.MTR_OBSERVACAO = dr["MTR_OBSERVACAO"].ToString();
                    item.MTR_DTCADASTRO = dr["MTR_DTCADASTRO"].ToString().Replace("00:00:00", "");
                    item.MTR_DTVALIDADE = dr["MTR_DTVALIDADE"].ToString().Replace("00:00:00", "");
                    lista.Add(item);

                }
                return lista;
            }
            finally
            {
                sqlServer.fecharConexao(sqlConexao);
            }
        }


        public ES_Material _obter_Material_by_id(
                                                string MATERIAL_ID
                                                )
        {

            if (string.IsNullOrEmpty(MATERIAL_ID)) MATERIAL_ID = "'0'";

            string sql = "SELECT " +
                                  "MATERIAL.MATERIAL_ID, " +
                                  "MATERIAL.MATERIAL_MODALIDADE_ID, " +
                                  "MATERIAL_MODALIDADE.MMD_DESCRICAO, "+
                                  "MATERIAL.MTR_DESCRICAO, " +
                                  "MATERIAL.MTR_VALOR, " +
                                  "MATERIAL.MTR_QUANTIDADEDISP, " +
                                  "MATERIAL.MTR_VALIDADE, " +
                                  "MATERIAL.MTR_OBSERVACAO, " +
                                  "MATERIAL.MTR_DTCADASTRO, " +
                                  "MATERIAL.MTR_DTVALIDADE " +
                            "FROM MATERIAL " +
                            "LEFT JOIN MATERIAL_MODALIDADE ON MATERIAL_MODALIDADE.MATERIAL_MODALIDADE_ID = MATERIAL.MATERIAL_MODALIDADE_ID " +
                            "WHERE " +
                            "      (MATERIAL.MATERIAL_ID = " + MATERIAL_ID + "  OR " + MATERIAL_ID + " = '0') ";

            ES_Material item = new ES_Material();
            SqlConnection sqlConexao = new SqlConnection(conectionString);
            SqlDataReader dr = sqlServer.retornaDataReader(sql, conectionString, sqlConexao);
            try
            {
                while (dr.Read())
                {
                    item.MATERIAL_ID = dr["MATERIAL_ID"].ToString();
                    item.MATERIAL_MODALIDADE_ID = dr["MATERIAL_MODALIDADE_ID"].ToString();
                    item.MMD_DESCRICAO = dr["MMD_DESCRICAO"].ToString();
                    item.MTR_DESCRICAO = dr["MTR_DESCRICAO"].ToString();
                    item.MTR_VALOR = dr["MTR_VALOR"].ToString();
                    item.MTR_QUANTIDADEDISP = dr["MTR_QUANTIDADEDISP"].ToString();
                    item.MTR_VALIDADE = dr["MTR_VALIDADE"].ToString();                    
                    item.MTR_OBSERVACAO = dr["MTR_OBSERVACAO"].ToString();
                    item.MTR_DTCADASTRO = dr["MTR_DTCADASTRO"].ToString().Replace("00:00:00","");
                    item.MTR_DTVALIDADE = dr["MTR_DTVALIDADE"].ToString().Replace("00:00:00", "");


                }
                return item;
            }
            finally
            {
                sqlServer.fecharConexao(sqlConexao);
            }
        }


        public void _inserir_Material(
                                        string MATERIAL_ID,
                                        string MATERIAL_MODALIDADE_ID,
                                        string MTR_DESCRICAO,
                                        string MTR_VALOR,
                                        string MTR_QUANTIDADEDISP,
                                        string MTR_VALIDADE,
                                        string MTR_DTCADASTRO,
                                        string MTR_DTVALIDADE,
                                        string MTR_OBSERVACAO
                                                )
        {

            string sql = " INSERT INTO MATERIAL " +
                         "      ( " +                         
                         "           MATERIAL_MODALIDADE_ID, " +
                         "           MTR_DESCRICAO, " +
                         "           MTR_VALOR, " +
                         "           MTR_QUANTIDADEDISP, " +
                         "           MTR_VALIDADE, " +
                         "           MTR_DTCADASTRO, " +
                         "           MTR_DTVALIDADE, " +
                         "           MTR_OBSERVACAO " +
                 "      )" +
                 "  VALUES " +
                 "      ( " +

                        "            " + MATERIAL_MODALIDADE_ID + ", " +
                        "            " + Util.retonarAspas(MTR_DESCRICAO, true) + ", " +
                        "            " + Util.formataFloat(MTR_VALOR, true) + ", " +
                        "            " + MTR_QUANTIDADEDISP + ", " +
                        "            " + Util.retonarNull(MTR_VALIDADE) + ", " +
                        "            " + Util.retonarAspas(Util.formataData(MTR_DTCADASTRO, "dd/MM/yyyy",true), true) + ", " +
                        "            " + Util.retonarAspas(Util.formataData(MTR_DTVALIDADE, "dd/MM/yyyy", true), true) + ", " +
                        "            " + Util.retonarAspas(MTR_OBSERVACAO, true) + 
                 "      )";
            try
            {
                sqlServer._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }



        public void _atualizar_Material(
                                                string MATERIAL_ID,
                                                string MATERIAL_MODALIDADE_ID,
                                                string MTR_DESCRICAO,
                                                string MTR_VALOR,
                                                string MTR_QUANTIDADEDISP,
                                                string MTR_VALIDADE,
                                                string MTR_DTCADASTRO,
                                                string MTR_DTVALIDADE,
                                                string MTR_OBSERVACAO
                                                )
        {

            string sql = " UPDATE MATERIAL SET " +
                         "      MATERIAL_MODALIDADE_ID = " + MATERIAL_MODALIDADE_ID + ", " +
                         "      MTR_DESCRICAO = " + Util.retonarAspas(MTR_DESCRICAO, true) + ", " +
                         "      MTR_VALOR = " + Util.formataFloat(MTR_VALOR, true) + ", " +
                         "      MTR_QUANTIDADEDISP = " + Util.formataFloat(MTR_QUANTIDADEDISP) + ", " +
                         "      MTR_VALIDADE = " + Util.retonarNull(MTR_VALIDADE) + ", " +
                         "      MTR_DTCADASTRO = " + Util.retonarAspas(Util.formataData(MTR_DTCADASTRO, "dd/MM/yyyy", true), true) + ", " +
                         "      MTR_DTVALIDADE = " + Util.retonarAspas(Util.formataData(MTR_DTVALIDADE, "dd/MM/yyyy", true), true) + ", " +
                         "      MTR_OBSERVACAO = " + Util.retonarAspas(MTR_OBSERVACAO, true) +
                         " WHERE MATERIAL_ID =  " + MATERIAL_ID;
            try
            {
                sqlServer._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }

        public void _atualizar_Material(
                                        string MATERIAL_ID,                                        
                                        string MTR_QUANTIDADEDISP
                                        )
        {

            string sql = " UPDATE MATERIAL SET " +                         
                         "      MTR_QUANTIDADEDISP = " + Util.formataFloat(MTR_QUANTIDADEDISP) +
                         " WHERE MATERIAL_ID =  " + MATERIAL_ID;
            try
            {
                sqlServer._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }

        public void _excluir_Material(string MATERIAL_ID)
        {
            string sql = "DELETE FROM MATERIAL WHERE MATERIAL_ID = " + MATERIAL_ID;
            try
            {
                sqlServer._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }



        #endregion
    }
}
